unit PerfilFuncDM;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ZSqlUpdate, ZDataset, ZSequence, MainDM, DB, QueryConditions;

type

  { TPerfilFuncData }

  TPerfilFuncData = class(TMainDataModule)
    FuncZQuerydesc_acao: TStringField;
    FuncZQuerydesc_funcionalidades: TStringField;
    FuncZQueryid_funcionalidades: TLargeintField;
    FuncZQuerypossui: TBooleanField;
    PerfilDatasource: TDatasource;
    PerfilFuncDatasource: TDatasource;
    FuncDatasource: TDatasource;
    PerfilFuncZQuery: TZQuery;
    FuncZQuery: TZQuery;
    PerfilFuncZQuerydesc_perfil: TStringField;
    PerfilFuncZQueryid_funcionalidades: TLargeintField;
    PerfilFuncZQueryid_perfil: TLargeintField;
    PerfilFuncZUpdate: TZUpdateSQL;
    AuxiliarZQuery: TZQuery;
    PerfilZQuery: TZQuery;
    PerfilZQuerydesc_perfil: TStringField;
    PerfilZQueryid_perfil: TLargeintField;
    PerfilZSequence: TZSequence;
    PerfilZUpdate: TZUpdateSQL;
    procedure DataModuleCreate(Sender: TObject);
    /// Abre o DataSet
    procedure OpenDataSet(); override;
    /// Fecha o DataSet
    procedure CloseDataSet(); override;
    /// Realiza busca
    /// @param(Condicoes são as condições para a busca)
    /// @param(Tabela é a tabela no banco de dados)
    procedure Search(Condicoes: TQueryConditions; Tabela: string); override;
    procedure BuscaFuncionalidadePerfil(IDPerfil: string);
    procedure AlteraFuncionalidadePerfil(DescFuncionalidade: string; Inserir: string);
    procedure Salvar();
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  PerfilFuncData: TPerfilFuncData;

implementation

uses ConnectionDM;

{ TPerfilFuncData }

procedure TPerfilFuncData.DataModuleCreate(Sender: TObject);
begin
  MainDataSet := PerfilFuncZQuery;
end;


procedure TPerfilFuncData.OpenDataSet();
begin
  ConnectionData.Query(PerfilFuncZQuery, 'perfil_funcionalidades');
  FuncZQuery.Open;
end;

procedure TPerfilFuncData.CloseDataSet();
begin
  PerfilFuncZQuery.Close();
end;

procedure TPerfilFuncData.Search(Condicoes: TQueryConditions; Tabela: string);
begin
  ConnectionData.OpenQueryConditions(PerfilFuncZQuery, Tabela, Condicoes);
end;

procedure TPerfilFuncData.BuscaFuncionalidadePerfil(IDPerfil: string);
var
  ln: integer;

begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT f.desc_funcionalidades FROM perfil_funcionalidades as pf, funcionalidades as f');
    SQL.Add('WHERE pf.id_perfil=:id_perfil AND pf.id_funcionalidades=f.id_funcionalidades');
    ParamByName('id_perfil').AsString := IDPerfil;
    Open();
  end;
end;

procedure TPerfilFuncData.AlteraFuncionalidadePerfil(DescFuncionalidade: string;
  Inserir: string);
var
  IDFuncionalidade: string;
begin
  with AuxiliarZQuery do begin
    Close();
    SQL.Clear();
    SQL.Add('SELECT f.id_funcionalidades FROM funcionalidades as f');
    SQL.Add('WHERE f.desc_funcionalidades=:desc_funcionalidade');
    ParamByName('desc_funcionalidade').AsString := DescFuncionalidade;
    Open();
    if RecordCount > 0 then begin
      IDFuncionalidade := AuxiliarZQuery.FieldByName('id_funcionalidades').AsString;
    end;
  end;

  if Inserir = 'E' then begin
    with PerfilFuncZQuery do begin
      FieldByName('id_funcionalidades').AsString := IDFuncionalidade;
      Post();
      Open();
      Edit();
    end;
  end else begin
    with AuxiliarZQuery do begin
      Close();
      SQL.Clear();
      SQL.Add('DELETE FROM perfil_funcionalidades as pf');
      SQL.Add('WHERE pf.id_perfil=:id_perfil AND pf.id_funcionalidades=:id_funcionalidades');
      ParamByName('id_perfil').AsString :=
        PerfilFuncZQuery.FieldByName('id_perfil').AsString;
      ParamByName('id_funcionalidades').AsString := IDFuncionalidade;
      ExecSQL();
    end;
  end;
end;

procedure TPerfilFuncData.Salvar();
begin
  if (PerfilFuncZQuery.FieldByName('id_perfil').AsString <> '') and
    (PerfilFuncZQuery.FieldByName('id_funcionalidades').AsString <> '') then begin
    PerfilFuncZQuery.Post();
  end else begin
    PerfilFuncData.PerfilFuncZQuery.Cancel();
  end;
end;

initialization
  {$I perfilfuncdm.lrs}

end.
